In order to increase computer programmer productivity, there is a trend towards a more declarative style of programming and away from the traditional imperative style. In a declarative environment, a programmer tells the system a desired goal or object, but the programmer does not necessarily tell the system how to achieve that desired goal or object.
Programming tools today enable extensibility in the areas of frameworks and application programming interfaces (APIs), but do not provide extensibility in the area of declarative programming. While new frameworks can be constructed, these frameworks are interacted with through an imperative programming model; i.e., users must create subclasses, instantiate objects, set properties, call methods, etc.
An indication of the need for an extensible declarative programming model is the increasing reliance on wizards, templates, and automatic code generation. For example, Visual Studio .NET by Microsoft Corporation of Redmond, Wash., has code generators for Windows® Forms, strongly typed DataSets, and Web Service Proxies, all of which are declarative in nature but present no declarative programming model. A drawback of such automatically generated code is that if a user makes modifications to the automatically generated code, these modifications will be lost if the code is ever re-generated. Accordingly, there is a need for providing a user, such as a computer programmer or developer, with systems and methods for creating a declarative programming model.